home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 3 / CD ACTUAL 3.iso / linux / sonido / studio.000 / studio / Ss / plot.tk < prev    next >
Encoding:
Text File  |  1995-03-23  |  9.7 KB  |  343 lines

  1. #################################
  2. # The Plot Module
  3. #
  4. # Part of the SharpeSound Editor
  5. # by Paul D. Sharpe
  6. # A 3rd Year Project at the University of Leeds;
  7. # Department of Electronic and Electrical Engineering.
  8. # Date: 27/2/95
  9. #
  10. # Revision:0
  11. # Date:  
  12. set PLOT(Startx) 0
  13. set PLOT(Endx) 0
  14.  
  15. #################################
  16. # The plot Module
  17. #
  18. # Part of the SharpeSound Editor
  19. # by Paul D. Sharpe
  20. # A 3rd Year Project at the University of Leeds;
  21. # Department of Electronic and Electrical Engineering.
  22. #
  23. # Revision:0
  24. # Date: 27/2/94
  25.  
  26. ##########################
  27. # plotbox - Is the procedure that ...
  28. # There are 6 options.
  29. # 1. init : this sets up   but doesn't display them.
  30. # 2. show : this packs.
  31. # 3. noshow this unpacks.
  32. # 4. disabled : this disables all the buttons.
  33. # 5. normal : re-enables all the buttons.
  34. # 6. reset : redraws the window; useful if color settings have been changed
  35. proc PlotBox { option } {
  36.  
  37.   #++++++++++++++++++++++
  38.   # Get User Settings
  39.   global ConfigSet
  40.   global Menu_anc PLOT
  41.   set PLOT(Height) 100
  42.   set PLOT(Width) 400
  43.  
  44.   if {$option == "init" } {
  45. if {![winfo exists .plotbox]} {
  46.     frame .plotbox
  47.     label .plotbox.title -text Plot
  48.     frame .plotbox.cs
  49.     canvas .plotbox.cs.canvas
  50.     scrollbar .plotbox.cs.scroll -orient horizontal\
  51.                 -command ".plotbox.cs.canvas xview"
  52.     .plotbox.cs.canvas configure -xscrollcommand {.plotbox.cs.scroll set}
  53.     frame .plotbox.cs.marker
  54.     frame .plotbox.cs.marker.start
  55.     label .plotbox.cs.marker.start.label -text "Point 1"
  56.     label .plotbox.cs.marker.start.data -textvariable PLOT(Start)    
  57.     pack     .plotbox.cs.marker.start.data\
  58.         .plotbox.cs.marker.start.label\
  59.         -side top -fill x -expand 1
  60.     frame .plotbox.cs.marker.end
  61.      label .plotbox.cs.marker.end.label -text "Point 2"
  62.     label .plotbox.cs.marker.end.data -textvariable PLOT(End)
  63.     pack     .plotbox.cs.marker.end.data\
  64.         .plotbox.cs.marker.end.label\
  65.         -side top -fill x -expand 1
  66.     frame .plotbox.cs.marker.zoom
  67.     label .plotbox.cs.marker.zoom.label -text "Zoom Level"
  68.     scrollbar .plotbox.cs.marker.zoom.data\
  69.             -command scrollcb\
  70.             -orient horizontal
  71.     # Callback to the scrollbar
  72.     proc scrollcb {value} {
  73.         if {$value==1} { Zoom up}\
  74.         elseif {$value==-1} {Zoom down}
  75.     }
  76.     label .plotbox.cs.marker.zoom.data.label\
  77.             -textvariable PLOT(ZoomCount) 
  78.     pack .plotbox.cs.marker.zoom.data.label\
  79.         -pady 1
  80.         
  81.     pack     .plotbox.cs.marker.zoom.data -side top -fill x  
  82.     pack    .plotbox.cs.marker.zoom.label\
  83.         -side top -fill x -expand 1
  84.  
  85.     pack     .plotbox.cs.marker.start\
  86.         .plotbox.cs.marker.zoom\
  87.         .plotbox.cs.marker.end\
  88.         -padx 5 -side left -fill x -expand 1
  89.  
  90.     pack     .plotbox.cs.canvas \
  91.         .plotbox.cs.scroll \
  92.          -fill both -expand 1
  93.  
  94.     pack .plotbox.cs.marker -pady 2 -expand 1
  95.  
  96.  
  97.     pack .plotbox.title -fill x -expand 1
  98.     pack .plotbox.cs -padx 10
  99.  
  100.  
  101.     # Bindings for Canvas
  102.     # Button 1: start marking a block
  103.     bind .plotbox.cs.canvas <Button-1> { 
  104.         global PLOT
  105.         set PLOT(Startx) [.plotbox.cs.canvas canvasx %x]
  106.         if {$PLOT(Startx)>$PLOT(Total)} { set PLOT(Startx) $PLOT(Total)}
  107.         set PLOT(Endx) $PLOT(Startx)
  108.         #reset marked area
  109.         MarkPlot
  110.         if {[info exists PLOT(MarkBox)] } {.plotbox.cs.canvas raise $PLOT(MarkBox) graph}
  111.     set FLAG(Marked) 0
  112.     }
  113.  
  114.     # Button 1 motion mark an area
  115.     bind .plotbox.cs.canvas <B1-Motion> {
  116.  
  117.         # if mouse is dragged beyound the limits of the visual canvas
  118.         # continue marking  into rest of canvas.
  119.  
  120.         # Right limit.
  121.         if {%x > $PLOT(Width) } { .plotbox.cs.canvas scan mark %x %y
  122.                     .plotbox.cs.canvas scan dragto [expr %x-10] 0 } 
  123.         # Left limit.
  124.         if {%x < 0 } { .plotbox.cs.canvas scan mark %x %y
  125.                     .plotbox.cs.canvas scan dragto [expr %x+10] 0 }
  126.         # Set the end marker
  127.         set PLOT(Endx) [.plotbox.cs.canvas canvasx %x]
  128.         if {$PLOT(Endx)>$PLOT(Total)} { set PLOT(Endx) $PLOT(Total)}
  129.         # Mark the area.    
  130.         MarkPlot
  131.         if {[info exists PLOT(MarkBox)] } {.plotbox.cs.canvas lower $PLOT(MarkBox) graph}
  132.             set FLAG(Marked) 1
  133.     }
  134.  
  135.     # Button 2 : adjust marked area up to pointer
  136.     bind .plotbox.cs.canvas <Button-2> {
  137.         # Set the end marker
  138.          set PLOT(Endx) [.plotbox.cs.canvas canvasx %x]
  139.         if {$PLOT(Endx)>$PLOT(Total)} { set PLOT(Endx) $PLOT(Total)}
  140.         # Mark the area.
  141.         MarkPlot
  142.         if {[info exists PLOT(MarkBox)] } {.plotbox.cs.canvas lower $PLOT(MarkBox) graph}
  143.         set FLAG(Marked) 1
  144.     }
  145.  
  146.     # Button 3: Drag the canvas view.
  147.     bind .plotbox.cs.canvas <Button-3> { .plotbox.cs.canvas scan mark %x %y }
  148.     bind .plotbox.cs.canvas <B3-Motion> { .plotbox.cs.canvas scan dragto %x %y }
  149. }
  150.  
  151.     # Configure Widgets
  152.     .plotbox config -background $ConfigSet(cBG1)\
  153.             -relief $ConfigSet(REL) -bd $ConfigSet(BDW)
  154.     .plotbox.title config \
  155.             -background $ConfigSet(cBG1) \
  156.             -foreground $ConfigSet(cFG1) \
  157.             -anchor w\
  158.             -font $ConfigSet(FNT_S)    
  159.     .plotbox.cs config    -background $ConfigSet(cBG1)
  160.     .plotbox.cs.canvas config -background $ConfigSet(cBG3)\
  161.                 -width $PLOT(Width)\
  162.                 -height $PLOT(Height)\
  163.                 -relief sunken\
  164.                 -cursor crosshair
  165.     .plotbox.cs.scroll config -background $ConfigSet(cBG1) \
  166.                 -foreground $ConfigSet(cBG2)\
  167.                 -activeforeground $ConfigSet(cABG)
  168.     .plotbox.cs.marker config -background $ConfigSet(cBG1) -bd 2
  169.     .plotbox.cs.marker.start config -background $ConfigSet(cBG1) 
  170.     .plotbox.cs.marker.start.label config\
  171.             -background $ConfigSet(cBG1) \
  172.             -foreground $ConfigSet(cFG1) \
  173.             -anchor w\
  174.             -font $ConfigSet(FNT_S)
  175.             
  176.     .plotbox.cs.marker.start.data config\
  177.             -background $ConfigSet(cBG2) \
  178.             -foreground $ConfigSet(cFG2) \
  179.             -anchor c\
  180.             -font $ConfigSet(FNT_L)\
  181.             -width 15\
  182.             -relief groove
  183.     .plotbox.cs.marker.end config -background $ConfigSet(cBG1) 
  184.      .plotbox.cs.marker.end.label config\
  185.             -background $ConfigSet(cBG1) \
  186.             -foreground $ConfigSet(cFG1) \
  187.             -anchor e\
  188.             -font $ConfigSet(FNT_S)
  189.             
  190.     .plotbox.cs.marker.end.data config\
  191.             -background $ConfigSet(cBG2) \
  192.             -foreground $ConfigSet(cFG2) \
  193.             -anchor c\
  194.             -font $ConfigSet(FNT_L)\
  195.             -width 15\
  196.             -relief groove
  197.  
  198.     .plotbox.cs.marker.zoom config -background $ConfigSet(cBG1) 
  199.     .plotbox.cs.marker.zoom.label config\
  200.             -background $ConfigSet(cBG1) \
  201.             -foreground $ConfigSet(cFG1) \
  202.             -anchor w\
  203.             -font $ConfigSet(FNT_S)
  204.     .plotbox.cs.marker.zoom.data config\
  205.             -background $ConfigSet(cBG2) \
  206.             -foreground $ConfigSet(cBG2) \
  207.             -activeforeground $ConfigSet(cABG)\
  208.             -bd 2\
  209.             -relief groove
  210.     .plotbox.cs.marker.zoom.data.label config\
  211.             -background $ConfigSet(cBG2) \
  212.             -foreground $ConfigSet(cFG2) \
  213.             -anchor c\
  214.             -font $ConfigSet(FNT_L)
  215.   }\
  216. elseif {[winfo exists .plotbox]} {
  217.     if {$option == "show"} {
  218.     global PACK
  219.     if {$PACK(PlotBox) != ""} {    
  220.      pack .plotbox -fill x -expand 1 -after $PACK(PlotBox)
  221.     } else {
  222.      pack .plotbox -fill x -expand 1 -after
  223.     }
  224.     }\
  225.     elseif {$option == "disabled" || $option=="normal"} { }\
  226.     elseif {$option == "noshow" } { pack forget .plotbox} \
  227.       elseif {$option == "init"} {# A try to use init again;Ignore This case} \
  228.      elseif {$option == "reset"} {
  229.         set packflag [llength [pack info .infobar]]
  230.         destroy .plotbox
  231.         # DEBUG LINE
  232.         source menu.tk
  233.         PlotBox init
  234.         if {$packflag} {PlotBox show}
  235.     }
  236. }
  237. }
  238.  
  239. proc MarkPlot {} {
  240.   global PLOT ConfigSet LOAD
  241.   if {[info exists PLOT(MarkBox)] } {
  242.     .plotbox.cs.canvas coord $PLOT(MarkBox) $PLOT(Startx) 0 $PLOT(Endx) $PLOT(Height)
  243.     .plotbox.cs.canvas itemconfigure m1 -fill $ConfigSet(cFG3)
  244.     .plotbox.cs.canvas dtag m1
  245.     .plotbox.cs.canvas addtag m1 enclosed $PLOT(Startx) 0 $PLOT(Endx) $PLOT(Height)
  246.     .plotbox.cs.canvas itemconfigure m1 -fill $ConfigSet(cFG2)
  247.     set PLOT(Start) [expr (($PLOT(Startx)*$PLOT(Blocksize))+$PLOT(Offset))/$LOAD(rate).0]
  248.     set PLOT(End) [expr ( ($PLOT(Endx)*$PLOT(Blocksize))+$PLOT(Offset))/$LOAD(rate).0]
  249.     # And now formatted
  250.     set PLOT(Start) [Sec2Time $PLOT(Start)]
  251.     set PLOT(End) [Sec2Time $PLOT(End)]
  252.   }
  253.  
  254. }
  255.  
  256. proc FillPlot {  {blocksize init} { opt default}} {
  257. global PLOT ConfigSet SAMPLE FILE LOAD
  258.  
  259. if {$opt=="default"} {
  260.     set file $FILE(TMP1)
  261. } else { set file $opt }
  262. set mask [expr (($LOAD(bit)>>4)<<1) + ($LOAD(chnl)>>1) ]
  263.  
  264. # Set an initial block size based on the number of samples 
  265. if {$blocksize=="init"} {
  266.        set maxmin [exec $FILE(SRC)/maxmin 100 $mask $file] 
  267.        set length [join [lindex $maxmin 1]]
  268.        set Plot(Total) [expr $PLOT(Width) -5]
  269.        set PLOT(Blocksize) [expr int(round($length/$PLOT(Width).0))]
  270.        if {$opt=="default"} {set PLOT(MaxBlockSize) $PLOT(Blocksize)
  271.                 set PLOT(Offset) 0 
  272.                 set SAMPLE(Size) $length
  273.                   # Update InfoBar
  274.                 InfoFill    
  275.                 Zoom init}
  276. } elseif {$blocksize=="delete"} {
  277.     # Delete complete contents 
  278.     .plotbox.cs.canvas delete all
  279.     catch {unset PLOT(MarkBox)}
  280.     set PLOT(Startx)        0
  281.     set PLOT(Endx)            0
  282.     set PLOT(Start)     [Sec2Time 0]
  283.     set PLOT(End)         [Sec2Time 0]
  284.     set PLOT(Total)        $PLOT(Width)
  285.     set PLOT(Blocksize)        0
  286.     set PLOT(Zoom)             100
  287.     return
  288. } \
  289. else {
  290.     set PLOT(Blocksize) $blocksize
  291. }
  292.  
  293. # Get points with new blocksize
  294. if {$PLOT(Blocksize)>0} {
  295. set maxmin [exec $FILE(SRC)/maxmin $PLOT(Blocksize) $mask $file]
  296. set PLOT(Points) [lindex $maxmin 0]
  297. } else {FillPlot delete; return}
  298.  
  299.  
  300. set i 0
  301. # Delete any previous plot 
  302. .plotbox.cs.canvas delete graph
  303.  
  304. # Plot the points
  305. set count 0
  306. foreach point $PLOT(Points) {
  307. incr count
  308. # get from normalised values to Canvas coordinates
  309. set min [expr round( [lindex $point 0] *($PLOT(Height)))]
  310. set max [expr round( [lindex $point 1] *($PLOT(Height)))]
  311.  
  312. # Ensure that a dot is placed
  313. if {$min==$max} { incr max}
  314. .plotbox.cs.canvas create line $i $min $i $max -tags graph -fill $ConfigSet(cFG3)
  315.         
  316. incr i
  317.  
  318. }
  319. # Set the total lines drawn
  320. set PLOT(Total) $count
  321.  
  322. # Set the marking area
  323. if {[info exists PLOT(MarkBox)]} { 
  324.     MarkPlot
  325. } else {
  326.     # Configure marking area
  327.     set PLOT(MarkBox) [.plotbox.cs.canvas create rectangle 0 0 0 $PLOT(Height) \
  328.         -fill $ConfigSet(cFG3) -outline $ConfigSet(cFG2) ]
  329.     set PLOT(Startx) 0
  330.     set PLOT(Endx) 0
  331.     MarkPlot
  332. }
  333.  
  334. # Put Marking Box below the graph
  335. .plotbox.cs.canvas lower $PLOT(MarkBox) graph 
  336. # Set the canvas range
  337. .plotbox.cs.canvas configure -scrollregion " 0 0 $PLOT(Total) $PLOT(Height) "
  338.  
  339. # Remove numerical data from memory
  340. unset PLOT(Points)
  341.  
  342. }
  343.